#pragma once

#include <vector>

#define PAN_WINDOW_POKER                _T("atom_window_poker")

// Poke function id
enum {
    PFI_WINDOW_POKER_BASE   = 100,

    // Param = PPKeyState, IOParam = bool
    PFI_SET_KEY_STATE,

    // Param = PPKeyState, IOParam = bool
    PFI_GET_KEY_STATE,

    // Param = PPSendKeyMessage, IOParam = bool
    PFI_SEND_KEY_MESSAGE,

    // Param = int, IOParam = bool
    PFI_SEND_MOUSE_MESSAGE,
    
    // Param = PPSendMultiKeyMessage, IOParam = bool
    PFI_SEND_MULTI_KEY_MESSAGE,

    // Param = PPSendMultiKeyMessage, IOParam = bool
    PFI_SEND_MULTI_MOUSE_MESSAGE,
};

struct PPKeyState {
    bool m_bSetLeftCtrl;
    bool m_bSetLeftAlt;
    bool m_bSetLeftShift;
    bool m_bSetRightCtrl;
    bool m_bSetRightAlt;
    bool m_bSetRightShift;
};

struct PPSendKeyMessage {
    int m_nMessage;
    TCHAR m_nKey;

    PPSendKeyMessage(int nMessage, TCHAR nKey) 
        : m_nMessage(nMessage), m_nKey(nKey)
    {}
};

struct PPSendMouseMessage {
    int m_nMessage;

    PPSendMouseMessage(int nMesage) : m_nMessage(nMesage) {}
};

struct PPSendMultiKeyMessage {
    std::vector<PPSendKeyMessage> m_vMsgList;
};

struct PPSendMultiMouseMessage {
    std::vector<PPSendMouseMessage> m_vMsgList;
};